分享 推播通知
目前身份: 訪客

 

資料表名稱是在哪裡定義的?這也是當初我一直困惑很久的,搞不清楚它是怎麼回事,只覺的奇怪。

 

其實是這樣的。上面的白箭頭,它是Model 的名稱,但是它又是資料表的名稱,甚麼意思呢?

 

就是它同時是Model的名稱,又同時是資料表的名稱,也就是它幫你做自動對映了。

 

還不止這樣,你的資料表名稱不是叫users嗎?但它上面是叫「User」不一樣阿!?

 

對,因為它會自動幫你加上複數s,也就是它會自動變成users,它就找到資料表了。

 

如果你不想要讓它自動為你的資料表加上s(複數),要如何做呢?就定義 freezeTableName這個參數,設定成 true ,就不會自動幫你加上s了

 

sequelize.define('User', {
// ... (attributes)
}, {
freezeTableName: true
}); 

 

const sequelize = new Sequelize('sqlite::memory:', {
define: {
freezeTableName: true
}
}); 

 

但是這種設計我個人是覺的有點雞婆,很容易混肴,程式碼又沒省到多少,重疊的定義實際上造成2個缺點

1、初學者來看,不容易理解

2、到底是有加s還是沒加s,最後還是得去資料庫去確認,實在是沒必要

 

當然可以理解作者可能是出自於好意,自動幫你做掉複數這個功能,因為資料表在定義時,常常有時有加s,有時沒加s,到底是要加s還是不要加s,他幫你們做掉,你們就不用考慮這些了。

 

但是對於程式的嚴謹角度來看,勢必還是要定義清楚、不要有模糊猜測的空間, 還是比較好的。

 

所以它又提供了這個 freezeTableName 變數讓你去凍結自動加上複數s的功能。

 

如果要直接指定資料表名稱,要如何做呢?

sequelize.define('User', {
// ... (属性)
}, {
tableName: 'users'
}); 

 這樣就是很明確了

人氣 2661
職場技能 發表在 留言 (0) 人氣 (2661)
第02章 Model基礎
分享給朋友
網址

想對外分享這則貼文嗎?運用網址更方便呦~

載入中...